// 引入 Pinia 的 defineStore 用于定义状态管理仓库
import { defineStore } from 'pinia'

// 定义用户角色类型，限定为 'admin' 或 'user'
type UserRole = 'admin' | 'user'

// 使用 defineStore 创建一个名为 'user' 的 store
export const useUserStore = defineStore('user', {
  // state：存储全局状态数据
  state: () => ({
    // 当前用户角色，可能是 admin、user 或 null（未登录）
    role: null as UserRole | null,
    // 当前用户信息对象，可以包含 id、name 等字段
    userInfo: null as any,
  }),

  // getters：计算属性，用于判断用户是否已登录
  getters: {
    // 只要 userInfo 和 role 都存在，就认为已登录
    isLoggedIn: (state) => !!state.userInfo && !!state.role,
  },

  // actions：操作方法，处理业务逻辑，如设置用户、登出等
  actions: {
    /**
     * 设置用户信息并保存到 localStorage
     * @param role 用户角色（admin 或 user）
     * @param user 用户信息对象
     */
    setUser(role: UserRole, user: any) {
      this.role = role
      this.userInfo = user
      // 本地缓存用户信息，key 为角色名
      localStorage.setItem(role, JSON.stringify(user))
    },

    /**
     * 从 localStorage 加载登录状态（页面刷新后仍能保留登录状态）
     */
    loadFromLocal() {
      const admin = localStorage.getItem('admin')
      const user = localStorage.getItem('user')
      if (admin) {
        this.role = 'admin'
        this.userInfo = JSON.parse(admin)
      } else if (user) {
        this.role = 'user'
        this.userInfo = JSON.parse(user)
      }
    },

    /**
     * 注销登录
     * @param router 可选，传入 Vue Router 实例用于跳转登录页
     */
    logout(router?: any) {
      // 清除本地缓存的用户信息
      if (this.role) {
        localStorage.removeItem(this.role)
      }
      // 清空内存中的用户状态
      this.role = null
      this.userInfo = null
      // 跳转到登录页（如果提供了 router 实例）
      if (router) {
        router.replace({ path: '/login' })
      }
    },
  },
})
